#ifndef _SCHEDULER_H_
#define _SCHEDULER_H_



/*
	class : Scheduler
	desc : Schedules operations of data using a
		context switcher and a schedule policy 
		to decide which data to switch
*/
template<typename Data>
class Scheduler
{
	private :
		//tells me how I want to do a context switch when scheduling
		ContextSwitcher<Data>* switcher;
		//policy to use for scheduling.
		SchedulePolicy<Data>* policy;


	public : 
		//default constructor
		Scheduler();
		//construtor that sets the context switcher telling how to 
		//perform context switch and sets the policy to use 
		Scheduler(ContextSwitcher<Data>* s, SchedulePolicy<Data>* p);
		//schedules a thread for execution
		void schedule(Data* thread); 
		//unschedules a thread from scheduler
		void unschedule(Data* thread);
		
};



#endif
